//package com.farm.tests;
//
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
//
//import java.util.concurrent.Executor;
//import java.util.concurrent.ThreadPoolExecutor;
//
//
//@Configuration
//public class ExecutorConfig {
//
//	// 获取服务器的 cpu 个数
//	private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
//
//    @Bean("taskExecutor")
//    public Executor taskExecutor() {
//        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//        // 核心线程数
//        executor.setCorePoolSize(CPU_COUNT * 2);
//        // 最大线程数
//        executor.setMaxPoolSize(CPU_COUNT * 4);
//        // 线程空闲保持时间
//        executor.setKeepAliveSeconds(50);
//        // 队列大小
//        executor.setQueueCapacity(CPU_COUNT * 16);
//        // 线程名前缀
//        executor.setThreadNamePrefix("");
//		// 设置拒绝策略
//		// AbortPolicy 	          ->    默认策略，如果线程池队列满了丢掉这个任务并且抛出 RejectedExecutionException 异常
//		// DiscardPolicy          ->    如果线程池队列满了，会直接丢掉这个任务并且不会有任何异常
//		// DiscardOldestPolicy    ->	如果队列满了，会将最早进入队列的任务删掉腾出空间，再尝试加入队列
//		// CallerRunsPolicy       ->	如果添加到线程池失败，那么主线程会自己去执行该任务，不会等待线程池中的线程去执行
//        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//        // 等待所有任务结束后再关闭线程池
//        executor.setWaitForTasksToCompleteOnShutdown(true);
//        executor.initialize();
//        return executor;
//    }
//}